From: Florian Müllner Date: Mon, 12 Oct 2020 11:19:07 +0000 (+0200) Subject: windowPreview: Allow titles to overlap other previews X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~616^2^2~512 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=5e10bed4585bc73d73a33a6fec9f202f1a13ec47;p=gnome-shell.git windowPreview: Allow titles to overlap other previews We are about to add additional chrome, but still want to use as much space as possible for the previews. Allowing titles to overlap other previews should help keeping the additional whitespace requirement low. https://gitlab.gnome.org/Teams/Design/os-mockups/-/issues/81 Part-of: --- diff --git a/js/ui/windowPreview.js b/js/ui/windowPreview.js index 014b2cc58..319ccf5f0 100644 --- a/js/ui/windowPreview.js +++ b/js/ui/windowPreview.js @@ -429,14 +429,20 @@ var WindowPreview = GObject.registerClass({ return app.get_name(); } + overlapHeights() { + const [, titleHeight] = this._title.get_preferred_height(-1); + + const topOverlap = 0; + const bottomOverlap = titleHeight / 2; + + return [topOverlap, bottomOverlap]; + } + chromeHeights() { const [, closeButtonHeight] = this._closeButton.get_preferred_height(-1); - const [, titleHeight] = this._title.get_preferred_height(-1); const topOversize = (this._borderSize / 2) + (closeButtonHeight / 2); - const bottomOversize = Math.max( - this._borderSize, - (titleHeight / 2) + (this._borderSize / 2)); + const bottomOversize = this._borderSize; return [topOversize, bottomOversize]; } @@ -462,6 +468,7 @@ var WindowPreview = GObject.registerClass({ return; this._overlayShown = true; + this._restack(); // If we're supposed to animate and an animation in our direction // is already happening, let that one continue @@ -493,6 +500,7 @@ var WindowPreview = GObject.registerClass({ return; this._overlayShown = false; + this._restack(); // If we're supposed to animate and an animation in our direction // is already happening, let that one continue @@ -739,6 +747,21 @@ var WindowPreview = GObject.registerClass({ return true; } + _restack() { + // We may not have a parent if DnD completed successfully, in + // which case our clone will shortly be destroyed and replaced + // with a new one on the target workspace. + const parent = this.get_parent(); + if (parent !== null) { + if (this._overlayShown) + parent.set_child_above_sibling(this, null); + else if (this._stackAbove === null) + parent.set_child_below_sibling(this, null); + else if (!this._stackAbove._overlayShown) + parent.set_child_above_sibling(this, this._stackAbove); + } + } + _onDragBegin(_draggable, _time) { this.inDrag = true; this.hideOverlay(false); @@ -760,16 +783,7 @@ var WindowPreview = GObject.registerClass({ _onDragEnd(_draggable, _time, _snapback) { this.inDrag = false; - // We may not have a parent if DnD completed successfully, in - // which case our clone will shortly be destroyed and replaced - // with a new one on the target workspace. - let parent = this.get_parent(); - if (parent !== null) { - if (this._stackAbove == null) - parent.set_child_below_sibling(this, null); - else - parent.set_child_above_sibling(this, this._stackAbove); - } + this._restack(); if (this['has-pointer']) this.showOverlay(true); diff --git a/js/ui/workspace.js b/js/ui/workspace.js index b9f8c2720..a93ec2726 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -469,10 +469,11 @@ var WorkspaceLayout = GObject.registerClass({ colSpacing += Math.max(leftOversize, rightOversize); if (containerBox) { - containerBox.x1 += leftOversize; + const [topOverlap, bottomOverlap] = window.overlapHeights(); + containerBox.x1 += leftOversize + topOverlap; containerBox.x2 -= rightOversize; containerBox.y1 += topOversize; - containerBox.y2 -= bottomOversize; + containerBox.y2 -= bottomOversize + bottomOverlap; } return [rowSpacing, colSpacing, containerBox];